﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework; 
using Microsoft.Xna.Framework.Audio; 
using Microsoft.Xna.Framework.Content; 
using Microsoft.Xna.Framework.GamerServices; 
using Microsoft.Xna.Framework.Graphics; 
using Microsoft.Xna.Framework.Input; 
using Microsoft.Xna.Framework.Media; 

namespace CapturarObjetos
{
    /// <summary>
    /// Criar um cronometro / contador
    /// FELIPE PINHEL CADÊ A EXPLICAÇÂO / DOCUMENTAÇÃO
    /// </summary>
    class ClockTimer 
    {    
        /// <summary>
        /// tempo total EM SEGUNDOS que meu cronometro vai contar
        /// acessível atraves do metodo start
        /// </summary>
        private int endTimer, totalTime;

        /// <summary>
        /// usado apenas para mostrar o tempo no draw do game 1
        /// </summary>
        public string displayClock { get; private set; }

        /// <summary>
        /// usado para fazer o cronometro começar a contar o tempo regressivamente
        /// </summary>
        private bool isRunning { get; set; } 
        
        public bool isFinished { get; set; }

        /// <summary>
        /// este método é usado/chamado para mudar (toggle) se o relogio está correndo o tempo, pára, senao (ou seja, se estiver pausado) passa a contar o tempo
        /// </summary>
        public void TogglePause()
        {
            isRunning = !isRunning;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="seconds"></param>
        public ClockTimer(int seconds) 
        {
            totalTime = endTimer = seconds;
            displayClock = ""; 
            isRunning = false; 
            isFinished = false; 
 
        }

        /// <summary>
        /// 
        /// </summary>
        public void setSeconds(int seconds)
        {
            totalTime = endTimer = seconds;
        }
      
        /// <summary>
        /// 
        /// </summary>
        public void start()
        {       
            if(!isRunning)
            isRunning = true;
        } 
 
        public void Update(GameTime gameTime) 
        { 
            //se o cronometro nao terminou e esta rodando
            if (!isFinished && isRunning) 
            { 
                //conto um segundo de tempo de jogo
                if ((int)gameTime.TotalGameTime.TotalMilliseconds % 1000 == 0) 
                { 
                    //caso tenha passado este segundo
                    endTimer--; 
                    //diminuo de um a minha variavel de tempo
                                         
                    //caso meu tempo tenha acabado
                    if (endTimer <= 0) 
                    { 
                        //marco a variavel disto
                        isFinished = true; 
                    } 
                }

                //mostro valor do cronometro
                displayClock = endTimer.ToString(); 
            }

            //caso tenha acabado o tempo
            if (isFinished)
            {
                //digo game over no cronometro
                displayClock = "Game over";
            }
        } 

        /// <summary>
        /// volto o tempo do cronometro ao tempo total inicial e continuo contando como estava antes
        /// </summary>
        public void reset() 
        { 
            //isRunning = false; 
            //isFinished = false;  //TO DO think about it
            endTimer = totalTime;
            displayClock = endTimer.ToString();
        }

        /// <summary>
        ///  volto o tempo do cronometro ao tempo total inicial e para de contar o tempo
        /// </summary>
        public void stop()
        {
            isRunning = false;
            isFinished = false;
            endTimer = totalTime;
            displayClock = endTimer.ToString();
        }
    } 
 }